home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Periodicals / develop / develop 10 code / Is it Art? / ArtMaker / events.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-04-08  |  5.8 KB  |  305 lines  |  [TEXT/KAHL]

  1. # include    "Shell.h"
  2.  
  3. extern Boolean            gDoneFlag;
  4. extern Rect                gDeskRect;
  5. extern MenuHandle        gShellMenuHandles[];
  6. extern long                gClickTime;
  7.  
  8. /*-------------------------------------------------------------------------
  9. DoEvent()            Standard Event Handler...
  10. -------------------------------------------------------------------------*/
  11.  
  12. DoEvent(EventRecord *Event)
  13. {
  14.     GrafPtr        oldport;
  15.     
  16.     switch(Event->what)
  17.     {
  18.         case activateEvt:
  19.             AppActivate((WindowPtr)Event->message, Event->modifiers & activeFlag);
  20.             break;
  21.                 
  22.         case updateEvt:
  23.             GetPort(&oldport);
  24.             SetPort((WindowPtr)Event->message);
  25.             BeginUpdate((WindowPtr)Event->message);
  26.             
  27.             AppUpdate(Event);
  28.             
  29.             EndUpdate((WindowPtr)Event->message);
  30.             SetPort(oldport);
  31.             break;
  32.  
  33.         case mouseDown:
  34.             DoMouse(Event);
  35.             gClickTime = Event->when;
  36.             break;
  37.             
  38.         case keyDown:
  39.             DoKey(Event);
  40.             break;
  41.         
  42.         case osEvt:
  43.             DoOS(Event);
  44.             break;
  45.         
  46.         case nullEvent:
  47.             AppIdle(Event);
  48.             break;
  49.     }
  50. }
  51.  
  52.  
  53. /*------------------------------------------------------------------------
  54. DoMouse()            Handles mousedown events...
  55. -------------------------------------------------------------------------*/
  56.  
  57. DoMouse(EventRecord *eventptr)
  58. {    
  59.     WindowPtr        whichWindptr;
  60.     Point            thePt;
  61.     long            mstuff;
  62.     short            part;
  63.     Boolean            doubleClick = false;
  64.  
  65.     
  66.     if((eventptr->when - gClickTime) <= GetDblTime())
  67.     {
  68.         doubleClick = true;
  69.     }
  70.     thePt = eventptr->where;
  71.     part = FindWindow(thePt, &whichWindptr);
  72.     switch(part)
  73.     {
  74.         case inDesk:
  75.             break;
  76.             
  77.         case inMenuBar:
  78.             AppAdjustMenus();
  79.             mstuff = MenuSelect(thePt);
  80.             DoMenus(mstuff);
  81.             break;
  82.             
  83.         case inSysWindow:
  84.             SystemClick(eventptr, whichWindptr);
  85.             break;
  86.         
  87.         case inContent:
  88.             if(whichWindptr != FrontWindow())
  89.                 SelectWindow(whichWindptr);
  90.             else
  91.             {
  92.                 SetPort(whichWindptr);
  93.                 GlobalToLocal(&thePt);
  94.                 AppClick(thePt, whichWindptr, doubleClick);
  95.             }
  96.             break;
  97.             
  98.         case inDrag:
  99.             DragWindow(whichWindptr, thePt, &gDeskRect);
  100.             break;
  101.  
  102.         case inGrow:
  103.             AppGrowWindow(whichWindptr, thePt, &gDeskRect);
  104.             break;
  105.             
  106.         case inGoAway:
  107.             if(TrackGoAway(whichWindptr, thePt))
  108.             {
  109.                 AppClose();
  110.             }
  111.             break;
  112.             
  113.         case inZoomIn:
  114.         case inZoomOut:
  115.             if(TrackBox(whichWindptr, thePt, part))
  116.                 AppZoomWindow(whichWindptr, part);
  117.             break;
  118.     }
  119. }
  120.  
  121.  
  122. /*-----------------------------------------------------------------------
  123. DoKey()            Handles keypresses...
  124. ------------------------------------------------------------------------*/
  125.  
  126. DoKey(EventRecord *eventptr)
  127. {
  128.     char    key;
  129.     
  130.     key = (char)(eventptr->message);
  131.     if(eventptr->modifiers & cmdKey)
  132.     {
  133.         long        rslt;
  134.         
  135.         AppAdjustMenus();
  136.         rslt = DoMenus(MenuKey(key));
  137.         if(HiWord(rslt))
  138.             return;
  139.     }
  140. }
  141.     
  142. /*-----------------------------------------------------------------------
  143. DoOS()    Handles suspend and resume events, ignores mouse moved events
  144. ------------------------------------------------------------------------*/
  145.  
  146. DoOS(EventRecord *eventPtr)
  147. {
  148.     WindowPtr    wind;
  149.     
  150.     /* Get the high byte of the message. Inside Mac VI says it's the low byte, but
  151.     then goes on to say bits 24-31. Must be a typo... */
  152.     switch ((eventPtr->message >> 24) & 0x0FF) /* the logical AND is a safety measure,
  153.                                                 to kill any sign bits shifted in */
  154.     {
  155.         case suspendResumeMessage:
  156.             /* Suspend/resume is also an activate/deactivate. */
  157.             AppActivate(FrontWindow(), eventPtr->message & resumeFlag);
  158.             break;
  159.  
  160.         case mouseMovedMessage:
  161.             break;
  162.     }
  163. }
  164.     
  165.  
  166. /*-----------------------------------------------------------------------
  167. DoMenus()            Handles a menu selection...
  168. ------------------------------------------------------------------------*/
  169.  
  170. DoMenus(long mstuff)
  171. {
  172.     short            id, item;
  173.     
  174.     if(HiWord(mstuff) == 0)
  175.         return;
  176.  
  177.     id = HiWord(mstuff);
  178.     item = LoWord(mstuff);
  179.     switch(id)
  180.     {
  181.         case kAppleMenuID:
  182.             DoApple(item);
  183.             break;
  184.             
  185.         case kFileMenuID:
  186.             DoFile(item);
  187.             break;
  188.  
  189.         case kEditMenuID:
  190.             DoEdit(item);
  191.             break;
  192.  
  193.         default:
  194.             AppMenu(id, item);
  195.             break;
  196.     }
  197.     HiliteMenu(0);
  198. }
  199.  
  200. /*-----------------------------------------------------------------------
  201. DoApple()            Handles apple menu...
  202. ------------------------------------------------------------------------*/
  203.  
  204. DoApple(short item)
  205. {
  206.     Str255                name;
  207.  
  208.     switch(item)
  209.     {
  210.         case iAbout:
  211.             Alert(kAboutAlertID, nil);
  212.             break;
  213.         
  214.         default:
  215.             GetItem(gShellMenuHandles[kAppleMenu], item, name);
  216.             OpenDeskAcc(name);
  217.     }
  218. }
  219.             
  220. /*-----------------------------------------------------------------------
  221. DoFile()            Handles File menu...
  222. ------------------------------------------------------------------------*/
  223.     
  224. DoFile(short item)
  225. {
  226.     switch(item)
  227.     {
  228.         case iOpen:   /* Open...  */
  229.             AppOpen();
  230.             break;
  231.  
  232.         case iClose:   /* Close...  */
  233.             AppClose();
  234.             break;
  235.  
  236.         case iSave:  /* Save... */
  237.             AppSave();
  238.             break;
  239.             
  240.         case iSaveAs:  /* Save As... */
  241.             AppSaveAs();
  242.             break;
  243.             
  244.         case iPageSetup:  /* Page Setup... */
  245.             AppPageSetup();
  246.             break;
  247.             
  248.         case iPrint:  /* Print... */
  249.             AppPrint();
  250.             break;
  251.             
  252.         case iQuit:  /* Quit */
  253.             gDoneFlag = AppQuit();
  254.             break;
  255.     }
  256. }
  257.  
  258. /*-----------------------------------------------------------------------
  259. DoEdit()            Handles Edit menu...
  260. ------------------------------------------------------------------------*/
  261.     
  262. DoEdit(short item)
  263. {
  264.     /* First call SystemEdit to let a DA do editing, if one is frontmost. We
  265.         pass it the item - 1 since the constants for the edit commands are zero-based */
  266.     if(SystemEdit(item - 1) == false)
  267.     {
  268.         /* The command is for the app since SystemEdit didn't handle it. */
  269.         switch(item)
  270.         {
  271.             case iUndo:
  272.                 AppUndo();
  273.                 break;
  274.     
  275.             case iCut:
  276.                 AppCut();
  277.                 break;
  278.                 
  279.             case iCopy:
  280.                 AppCopy();
  281.                 break;
  282.     
  283.             case iPaste:
  284.                 AppPaste();
  285.                 break;
  286.     
  287.             case iClear:
  288.                 AppClear();
  289.                 break;
  290.         }
  291.     }
  292. }
  293.  
  294.  
  295.  
  296. /*---------------------------------
  297. BailOut()        Clean up and split...
  298. ----------------------------------- */
  299.  
  300. void BailOut(void)
  301. {
  302.     AppCleanUp();
  303.     ExitToShell();
  304. }
  305.